package poker;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.Iterator;
import java.util.Properties;
import java.util.Vector;

import javax.swing.JOptionPane;

public class SpelRonde implements Serializable {


	private static final long serialVersionUID = 5814060747030872914L;
	public Kaart[] tafel;
	public Vector<Deelname> deelnames;
	public int inzet = 0;
	public String lastAction = "";
	public int lastActionSpeler = 0;
	public int actieveSpelers;
	public int inzetRonde = 0;
	
	
	public String toString(){
		String uitvoer = "Spelronde(tafel: {"+tafel[0]+","+tafel[1]+","+tafel[2]+","+tafel[3]+","+tafel[4]+"},";
		uitvoer += "deelnames: {";
		Iterator<Deelname> i = deelnames.iterator();
		Deelname d = i.next();
		uitvoer += d.toString();
		while(i.hasNext()){
			d = i.next();
			uitvoer += ", " +d.toString();
		}
		uitvoer += "}, inzet: "+inzet+")";
		return uitvoer;
	}
	
	public void addDeelname(Deelname d){
		deelnames.add(d);
		actieveSpelers++;
	}
	
	public void flushDeelnames(){
		deelnames.removeAllElements();
		actieveSpelers = 0;
	}
	
	public SpelRonde(){
		System.out.println("SpelRonde();");
		deelnames = new Vector<Deelname>();
		tafel = new Kaart[5];
	}
	
	public Deelname zoekDeelname(int spelerId){
		Iterator<Deelname> i = deelnames.iterator();
		Deelname d;
		while(i.hasNext()){
			d = i.next();

			if(d.getSpeler().spelerId == spelerId){
				//System.out.println("zoekDeelname: Deze is het");
				return d;
			}else{
				//System.out.println("zoekDeelname: Deze is het niet: "+d.getSpeler().spelerId);
				
			}
		}
		return null;
	}
	
	public void smallBlind(Speler speler)
	{
		zoekDeelname(speler.spelerId).zetIn(Deelname.SMALL_BLIND);
		this.inzet += Deelname.SMALL_BLIND;
		lastAction = "SMALL BLIND";
		lastActionSpeler = speler.spelerId;
	}

	public void bigBlind(Speler speler)
	{
		zoekDeelname(speler.spelerId).zetIn(Deelname.BIG_BLIND);
		this.inzet += Deelname.BIG_BLIND;
		lastAction = "BIG BLIND";
		lastActionSpeler = speler.spelerId;
	}
	public void check(Speler speler) {
		zoekDeelname(speler.spelerId).zetIn(0);
		lastAction = "CHECK";
		lastActionSpeler = speler.spelerId;
	}
	
	public void call(Speler speler, int inzet) {
		//System.out.println("SpelRonde.call(" + inzet + ")");
		Deelname deelname = zoekDeelname(speler.spelerId);
		if(deelname.getSpeler().getSaldo() >= inzet){
			this.inzet += inzet;
			deelname.zetIn(inzet);
			lastAction = "CALL";
			lastActionSpeler = speler.spelerId;
		}else{
			//System.out.println("Je kunt niet callen, saldo niet toereikend.");
		}
	}
	
	public void bet(Speler speler, int inzet) 
	{
		//System.out.println("SpelRonde: bet");
		Deelname deelname = zoekDeelname(speler.spelerId);
		if(deelname.getSpeler().getSaldo() >= inzet){
			this.inzet += inzet;
			deelname.zetIn(inzet);
			lastAction = "BET";
			lastActionSpeler = speler.spelerId;
		}else{
			//System.out.println("Je kunt niet raisen, saldo niet toereikend.");
		}
	}
	
	public void raise(Speler speler, int inzet) 
	{
		Deelname deelname = zoekDeelname(speler.spelerId);
		if(deelname.getSpeler().getSaldo() >= inzet){
			this.inzet += inzet;
			deelname.zetIn(inzet);
			lastAction = "RAISE";
			lastActionSpeler = speler.spelerId;
		}else{
			//System.out.println("Je kunt niet raisen, saldo niet toereikend.");
		}
	}

	public void fold(Speler speler) 
	{
		this.actieveSpelers--;
		Deelname deelname = zoekDeelname(speler.spelerId);
		deelname.kaart.removeAllElements();
		lastAction = "FOLD";
		lastActionSpeler = speler.spelerId;
		deelname.hasfolded = true;
	}
	
	public void allIn(Speler speler)
	{
		Deelname deelname = zoekDeelname(speler.spelerId);
		
		this.inzet += deelname.speler.getSaldo();
		deelname.zetIn(deelname.speler.getSaldo());
		lastAction = "ALL IN";
		lastActionSpeler = speler.spelerId;
	}
	
	public void stop() {
		//JOptionPane jop = new JOptionPane();
		int i1 = JOptionPane.showConfirmDialog(null, "Wilt u echt met het huidige spel stoppen?", "Stoppen", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
		if(i1 == JOptionPane.NO_OPTION) { }
		else {
			//'methode-om-connection-te-vermoorden!' 
			try {
				Properties p = new Properties();
				p.load( new FileInputStream("settings.ini") );
				new ConnectGUI(new Speler(p.getProperty("Nick")));
			}
			catch(IOException e) {}
		}
	}
	
	public void flop (Speler speler){
		Deelname deelname = zoekDeelname(speler.spelerId);
		deelname.resultaat = 0 - deelname.inzet;
	}

	public void turn (){
		
	}
	
}